/**
 * //配对交换。编写程序，交换某个整数的奇数位和偶数位，尽量使用较少的指令（也就是说，位0与位1交换，位2与位3交换，以此类推）。
 * //
 * // 示例1:
 * //
 * //
 * // 输入：num = 2（或者0b10）
 * // 输出 1 (或者 0b01)
 * //
 * //
 * // 示例2:
 * //
 * //
 * // 输入：num = 3
 * // 输出：3
 * //
 * //
 * // 提示:
 * //
 * //
 * // num的范围在[0, 2^30 - 1]之间，不会发生整数溢出。
 * //
 * //
 * // Related Topics 位运算 👍 71 👎 0
 */

package com.xixi.basicAlgroithms.bitManipulation;

public class ID_interview_05_07_ExchangeLcci {
    public static void main(String[] args) {
        Solution solution = new ID_interview_05_07_ExchangeLcci().new Solution();
    }


    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        public int exchangeBits(int num) {


            int weight = 0;
            int sum = 0;

            while (num != 0) {


                int bitNum = num & 1;
                if (weight % 2 == 0) { //偶数位放到奇数
                    sum += bitNum << (weight + 1);

                } else {//奇数位到偶数位
                    sum += bitNum << (weight - 1);
                }
                weight++;

                num = num >>> 1;
            }

            return sum;

        }
    }
//leetcode submit region end(Prohibit modification and deletion)


}